多线程使用 | 您所在的位置:网站首页 › std list遍历多线程 › 多线程使用 |
看下面的代码 #include #include using std::vector; using std::cout; using std::endl; void isNumEqual5(vector& num) { #pragma omp parallel for for (int i = 0; i vector num; for (int i = 8; i >0; i--) { num.push_back(i); } isNumEqual5(num); }
他的不安全在于,虽然官方帮你加上了同步锁,保证同一时间只会又一个线程操作同一个方法,但是他不能控制多个线程同时操作多个方法,也就是说,删除和添加是可以同时进行的,这就产生一个问题。删除实际上是分为两步的,第一步,找到被删除的元素所在下标,第二步,根据下标删除这个元素,而添加也分为两步,第一步,找到添加的下标,第二步,将其设为传入的参数,也就是说存在添加时,找到了数组下标,但是在进行添加时,该数组下标已经被删除的问题,反之亦然,但是这样操作很难看到效果,我们加点料,添加,然后取出要添加的位置,然后进行删除,运行。 |
CopyRight 2018-2019 实验室设备网 版权所有 |